project(grpc_test)

add_compile_options(-std=c++11)
add_compile_options(-pthread)


list(APPEND CMAKE_PREFIX_PATH "/opt/grpc" "/opt/protobuf")

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")

find_package(Protobuf REQUIRED)
find_package(GRPC REQUIRED)


set(PROTOS
    ${CMAKE_CURRENT_SOURCE_DIR}/proto/grpc_test.proto
)

set(PROTO_SRC_DIR ${CMAKE_CURRENT_BINARY_DIR})
file(MAKE_DIRECTORY ${PROTO_SRC_DIR})

include_directories(
    ${PROTO_SRC_DIR}
    ${CMAKE_CURRENT_LIST_DIR}/../${PROJECT_NAME}/include    
    ${CMAKE_CURRENT_BINARY_DIR}  
    ${CMAKE_CURRENT_BINARY_DIR}/../grpc_cpp
    )

protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_SRC_DIR} ${PROTOS})
grpc_generate_cpp(GRPC_SRCS GRPC_HDRS ${PROTO_SRC_DIR} ${PROTOS})


file(GLOB_RECURSE HEADER_FILES include/*.h)

foreach(type server client)
    file(GLOB_RECURSE ${type}_FILES ${type}/*.cpp)
    add_executable(${PROJECT_NAME}_${type}
        ${${type}_FILES}
        ${PROTO_SRCS}
        ${GRPC_SRCS}
        ${HEADER_FILES}
    )


    target_link_libraries(${PROJECT_NAME}_${type}
        ${PROTOBUF_LIBRARIES} 
        gRPC::grpc++_reflection
        protobuf::libprotobuf

        pthread
    )

    install(TARGETS ${PROJECT_NAME}_${type}
            DESTINATION lib
            )
endforeach()


